{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import sys\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "sys.path.append(\"../\")\n",
    "from mymodel import utils\n",
    "from mymodel import Show\n",
    "import pickle\n",
    "import re"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "170580"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# vocab\n",
    "with open(\"../data/timemachine.txt\",'r',encoding=\"utf-8\") as f:\n",
    "    lines = f.readlines()\n",
    "content = [re.sub(\"[^A-Za-z]+\",\" \",line).strip().lower() for line in lines] # 将不是A-Za-z中的一个或多个字符替换为空格\n",
    "tokens = utils.tokenize(content,\"char\") # tokens还是分行2d的\n",
    "# tokens = tokens[:600]\n",
    "vocab = utils.Vocab(tokens) # 词库索引转token，token转索引\n",
    "corpus = [vocab[token] for line in tokens for token in line] # 数字表示的文本\n",
    "len(corpus)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "# iter\n",
    "batch_size, num_steps = 32, 35\n",
    "device = utils.trygpu(0)\n",
    "class data_iter:\n",
    "    def __init__(self, corpus, use_random_iter=False) -> None:\n",
    "        self.random = use_random_iter\n",
    "        self.corpus = corpus\n",
    "    def __iter__(self):\n",
    "        if self.random:\n",
    "            return utils.seq_data_iter_random(self.corpus, batch_size, num_steps)\n",
    "        else:\n",
    "            return utils.seq_data_iter_seq(self.corpus, batch_size, num_steps)\n",
    "train_iter = data_iter(corpus)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_hidden = 256\n",
    "rnn_layer = nn.GRU(len(vocab), num_hidden)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from mymodel.utils import RNNModel\n",
    "net = RNNModel(rnn_layer, len(vocab)).to(device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 450x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "time traveller promed to bring with me to our own time and then \n",
      "困惑度 1.6 device: cuda:0\n",
      "time traveller and the stooping with back in the end even now a \n",
      "traveller presently a frow inthe enough the thick dust dere\n",
      "[trainRNN] run time :500.5976095199585 seconds\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 450x350 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "utils.trainRNN(10, net, train_iter, vocab, lr = 1, epochs=500, device=device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'time lone and dust i found it was too concers that disensively andlectuded to make me peculiar pitting ha'"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "utils.predictRNN(\"time \", 100, net,vocab, device)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3.7.2",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
